package com.rightrule.sequence.dao;

import com.rightrule.sequence.lifecycle.Lifecycle;
import com.rightrule.sequence.range.SequenceRange;

import java.sql.Timestamp;
import java.util.Date;

/**
 * @author: xry
 * @version: SequenceDao.java 2024/9/6 21:12
 */
public interface SequenceDao extends Lifecycle {

    /**
     * 获取下一个可用的序列区间
     *
     * @param name      序列名称
     * @param tntInstId 返回下一个可用的序列名称
     * @return
     */
    SequenceRange nextRange(String name, String tntInstId);

    /**
     * 获取当前的步长
     *
     * @return
     */
    int getStep();

    /**
     * 重试次数，init或nextRange都会基于这个值进行重试
     *
     * @return
     */
    int getRetryTimes();

    /**
     * 获取db系统时间
     * 采用select now() from dual语法
     * 精确到天
     *
     * @return 数据库系统时间
     */
    Date getSystemDate();

    /**
     * 获取db系统时间
     * 采用select now(6) from dual语法
     * 精确到毫秒
     *
     * @return 数据库系统时间
     */
    Timestamp getSystemTimestamp();
}
